Intermediate representations of programs that operate in a managed runtime environment (MRTE) may address specific platform characteristics (platform dependent) or exist in a platform neutral (platform independent) format. Platform independent code includes bytecode (e.g., Java™ bytecodes or the Common Language Interface (CLI) by Microsoft.®), which is typically a high level programming representation that does not accommodate low-level optimization opportunities. Bytecodes are typically generated from a high level programming language having a human-readable format. The bytecodes are intermediate representations that are platform independent, but much less abstract and more compact than the human-readable format from which they are derived. The bytecodes are typically compiled by a just-in-time (JIT) compiler, resulting in machine code specific to a computer platform. As such, the high level bytecodes may be distributed to many target computers without regard to the variation of the target platforms because the JIT compiler manages the details associated with the platform variations.
Because human-readable formats of code and/or bytecodes are in a high level and platform independent format, optimization of the code performance is very limited. Persons of ordinary skill in the art will appreciate an opportunity to program lower-level operations, which may include, but are not limited to, compare-and-swap operations and incrementing a garbage collection frontier pointer. Such low-level operations are typically inlined by the JIT compiler into generated code for performance enhancement. However, applying optimization at the bytecode level is usually inappropriate because either the platform neutral format of the bytecode would be destroyed or, more importantly, subsequent optimizations by the JIT compiler/bytecode verifiability would be impeded. For example, a bytecode-level optimization may improve code performance for some platforms having a JIT compiler, while hindering code performance in an alternate target JIT compiler.
Additionally or alternatively, JIT compilers may employ what are commonly referred to as magic methods to optimize code performance on specific platforms. The JIT compiler may recognize certain desired methods to be executed via the bytecodes and, subsequently, ignore such bytecodes in favor of internally generated optimized intermediate representation code that is used to produce executable code for the method. The magic methods are stored on the target machine as a part of the JIT compiler and exist as a result of the JIT compiler designer(s) identifying relatively common and/or popular methods for relatively common and/or popular platforms (e.g., mainstream methods and platforms). Thus, in view of the limited optimization capabilities of high level bytecodes, the compiler designer(s) provide optimized versions of such commonly used methods (i.e., the magic methods) to perform optimally on particular platforms used by a large percentage of the JIT compiler user-base. When the JIT compiler identifies a bytecode that matches a magic method, then the JIT compiler ignores the entire bytecode of the magic method or bytecode instruction that invokes it and, instead, generates optimized intermediate representations (either high level or low level) to produce executable code.
Although the use of magic methods allows optimized performance on specific platforms in response to platform independent bytecodes, such magic methods are available if and when the designer of the JIT compiler creates them. Like many products targeted to a mass market, product designers attempt to satisfy their largest contingency to a much higher degree than the users employing the product in a non-standard and/or unique manner. Furthermore, even when the magic methods successfully optimize various methods of the largest user-base, the user(s) may be aware of additional and/or alternate optimization techniques that the magic methods do not address. As such, the users of typical JIT compilers often rely on the JIT compiler designers for optimization techniques.